// 引入第三方数据库模块mongoose
const mongoose = require('mongoose');
// 引入joi模块
const Joi = require('joi');
// 创建用户集合规则
const userSchema = mongoose.Schema({
    username: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 20
    },
    email: {
        type: String,
        // 保证邮箱地址在插入数据库时不重复
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    // admin 超级管理员
    // normal 普通用户
    role: {
        type: String,
        required: true
    },
    state: {
        // 0 启用 1 禁用
        type: Number,
        default: 0
    }
});
// 创建用户集合 返回用户集合对象
const Users = mongoose.model('Users', userSchema);

// 初始化一个用户 用于登录
// Users.create({
//     username: 'Lee',
//     email: '694646236@qq.com',
//     password: '123456',
//     role: 'admin',
//     state: 0
// }).then(res => [
//     console.log(res)
// ]).catch(err => {
//     console.log(err)
// });

// 验证用户信息
const validateUser = user => {
    // 定义对象的验证规则
    const schema = {
        username: Joi.string().min(2).max(12).required().error(new Error('用户名不符合验证规则')),
        email: Joi.string().email().required().error(new Error('邮箱格式不符合要求')),
        password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码格式不符合要求')),
        role: Joi.string().valid('normal', 'admin').required().error(new Error('角色值非法')),
        state: Joi.number().valid(0, 1).required().error(new Error('状态值非法'))
    };
    // 实施验证
    return Joi.validate(user, schema);
}

// 将用户集合作为模块成员导出 将User对象作为另一个对象的属性导出
module.exports = {
    Users,    // 等价于Users: Users
    validateUser
}